//
//  FreightForwardingAPI.swift
//  GLUZSwift
//
//  Created by xyanl on 2025/5/13.
//
//  货代接口
import Foundation
import Moya

// RequestAPI就是一个遵循TargetType协议的枚举
enum FreightForwardingAPI {
    // 正式
    
    /// 查询视频通话积分 是否充足
    /// - Parameters:
    ///   - from: 发起视频通话的用户 id
    ///   - to: 被邀请视频通话的用户 id
    case getVideoCallScore(from: String, to: String)
    
    // 占位
    case placeholderApi
}

extension FreightForwardingAPI: TargetType {
    // 请求地址
    var baseURL: URL {
        // java 网络请求地址
        return URL(string: SystemEnvManager.shared.freightForwardingUrl)!
    }
    
    // 请求API
    var path: String {
        switch self {
        case .getVideoCallScore: return "/api/user/request_minute_score"
            
        default:
            fatalError("Request path is null")
        }
    }
    
    // 请求方式: post/get
    var method: Moya.Method {
        switch self {
        default: // 默认post请求
            return .post
        }
    }
    
    // 请求任务
    var task: Moya.Task {
        // 公共参数
        var params: [String: Any] = [:]
        
        // 根据不同的接口传入不同的参数
        switch self {
            
        case .getVideoCallScore(let from, let to):
            params["user_id"] = from
            params["target_id"] = to
            
        default:
            break
        }
        
        // 设置请求类型, 比如没有参数的请求、有参数的请求、上传文件、下载文件
        switch self {
        case .placeholderApi:
            // 没有请求参数的请求。
            return .requestPlain
            
        default:
            // 默认有请求参数
            if method == .get {
                // 在发起GET请求时，确保使用 URLEncoding.default 编码方式，这样参数会被正确添加到URL的查询字符串中，而不是作为请求体发送。
                return .requestParameters(parameters: params, encoding: URLEncoding.default)
            }
            return .requestParameters(parameters: params, encoding: JSONEncoding.default)
        }
    }
    
    // 公共头部信息
    var headers: [String: String]? {
        var headers: [String: String] = [:]
        headers["token"] = UserProfile.token
        headers["client"] = "app"
        headers["Content-type"] = "application/json;charset=utf-8"
        headers["requestStartTime"] = String(CFAbsoluteTimeGetCurrent())
        return headers
    }
}
